package org.huawei260.TiKu.B;

import java.util.Scanner;
import java.util.StringJoiner;

/**
 * @Auther: qingle
 * @Date: 2024/10/27-23:11
 * @Description:
 *
 * 小华是个对数字很敏感的小朋友，他觉得数字的不同排列方式有特殊美感。
 *
 * 某天，小华突发奇想，如果数字多行排列，第一行1个数，第二行2个，第三行3个，即第n行有n个数字，并且奇数行正序排列，偶数行逆序排列，数字依次累加。
 *
 * 这样排列的数字一定很有意思。聪明的你能编写代码帮助小华完成这个想法吗？
 *
 *
 *
 * 规则总结如下：
 *
 * a、每个数字占据4个位置，不足四位用"*"补位，如1打印为1***。
 *
 * b、数字之间相邻4空格。
 *
 * c、数字的打印顺序按照正序逆序交替打印,奇数行正序，偶数行逆序。
 *
 * d、最后一行数字顶格，第n-1行相对第n行缩进四个空格
 *
 * 输入格式
 * 第一行输入为N，表示打印多少行
 *
 * 1 <= N <= 30
 *
 * 输出格式
 *
 * 		按照要求打印的N行字符串
 *
 * 输入样例    复制
 * 5
 *
 * @version: 1.0
 */
public class B_数字反转打印 {

//	import java.util.Scanner;
//import java.util.StringJoiner;
//
//	public class Main {
		public static void main(String[] args) {
			Scanner sc = new Scanner(System.in);
			int n = sc.nextInt();
			getResult(n);
		}

		public static void getResult(int n) {
			// 每行要打印的数，起始为第一行第一个数1
			int print = 1;

			for (int i = 1; i <= n; i++) { // 多少行
				int[] printList = new int[i];
				for (int j = 0; j < i; j++) { // 每行多少个数
					printList[j] = print++;
				}

				if (i % 2 == 0) reverse(printList); // 如果是偶数行，则逆序

				StringJoiner printListStr = new StringJoiner("    ");
				for (int ele : printList) {
					StringBuilder sb = new StringBuilder(ele + "");
					while (sb.length() < 4) sb.append("*"); // 如果数字不足4位则后面用*补足
					printListStr.add(sb);
				}

				StringBuilder res = new StringBuilder(printListStr.toString());
				for (int k = 0; k < n - i; k++) {
					res.insert(0, "    "); // 每行的缩进
				}
				System.out.println(res);
			}
		}

		public static void reverse(int[] printList) {
			int l = 0;
			int r = printList.length - 1;

			while (l < r) {
				int tmp = printList[l];
				printList[l] = printList[r];
				printList[r] = tmp;
				l++;
				r--;
			}
		}
//	}
}
